package org.ksd.pug.service.user;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.ksd.pug.config.resultex.err.PugValidationException;
import org.ksd.pug.config.resultex.result.ResultCodeEnum;
import org.ksd.pug.mapper.UserMapper;
import org.ksd.pug.pojo.User;
import org.ksd.pug.utils.fn.asserts.Vsserts;
import org.ksd.pug.vo.UserVo;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * UserServiceImpl实现类
 * 创建人:星辰同学<br/>
 * 时间：2022-02-21 01:56:54 <br/>
 * 源码下载：www.gitee.com
 * 飞哥B站地址：www.baidu.com
 * @version 1.0.0<br/>
 *
*/
@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements IUserService  {

    /**
     * 查询分页&搜索分类
     * @param userVo
     * @return IPage<User>
     * 创建人:星辰同学
     * 创建时间：2022-02-21 01:56:54
     * @version 1.0.0
     */
    @Override
	public IPage<User> findUserPage(UserVo userVo){
	    // 设置分页信息
        Page<User> page = new Page<>(userVo.getPageNo(),userVo.getPageSize());
        // 设置查询条件
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // lambdaQueryWrapper.select(User.class, column -> !column.getColumn().equals("description"));
         //查询发布的 0 未发布  1 发布
        lambdaQueryWrapper.eq(userVo.getStatus() != null ,User::getStatus,userVo.getStatus());
        // 根据关键词搜索信息
        lambdaQueryWrapper.like(Vsserts.isNotEmpty(userVo.getKeyword()), User::getUsername,userVo.getKeyword());
        // 根据关键词搜索信息
        lambdaQueryWrapper.like(Vsserts.isNotEmpty(userVo.getKeyword()), User::getNickname,userVo.getKeyword());
        // 多列搜索
        // lambdaQueryWrapper.and(Vsserts.isNotEmpty(userVo.getKeyword()),wrapper -> wrapper
        //         .like(User::getName, userVo.getKeyword())
        //         .or()
        //         .like(User::getCategoryName, userVo.getKeyword())
        // );
        // 根据时间排降序
        lambdaQueryWrapper.orderByDesc(User::getCreateTime);
        // 查询分页返回
        IPage<User> results = this.page(page,lambdaQueryWrapper);
        return results;
	}

    /**
     * 查询分类列表信息
     * @method: findUserList
     * @result : List<User>
     * 创建人:星辰同学
     * 创建时间：2022-02-21 01:56:54
     * @version 1.0.0
     * @return
    */
    @Override
    public List<User> findUserList() {
     	// 1：设置查询条件
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 2：查询发布的 0 未发布  1 发布
        lambdaQueryWrapper.eq(User::getStatus,1);
        lambdaQueryWrapper.eq(User::getIsdelete,0);
        // 3: 查询返回
        return this.list(lambdaQueryWrapper);
    }

	/**
     * 根据id查询分类明细信息
     * @param id
     * @return User
     * 创建人:星辰同学
     * 创建时间：2022-02-21 01:56:54
     * @version 1.0.0
     */
    @Override
    public User getUserById(Long id) {
        return this.getById(id);
    }

    /**
     * 保存&修改分类
     * @param user
     * @return User
     * 创建人:星辰同学
     * 创建时间：2022-02-21 01:56:54
     * @version 1.0.0
     */
    @Override
	public User saveupdateUser(User user){
		boolean flag = this.saveOrUpdate(user);
		return flag ? user : null;
	}

    /**
     * 根据id删除分类
     * @param id
     * @return int
     * 创建人:星辰同学
     * 创建时间：2022-02-21 01:56:54
     * @version 1.0.0
     */
    @Override
    public int deleteUserById(Long id) {
        boolean b = this.removeById(id);
        return b ? 1 : 0;
    }

    /**
     * 根据id删除
     * @param ids
     * @return boolean
     * 创建人:星辰同学
     * 创建时间：2022-02-21 01:56:54
     * @version 1.0.0
     */
    @Override
    public boolean delBatchUser(String ids) {
        try {
            // 1 : 把数据分割
            String[] strings = ids.split(",");
            // 2: 组装成一个List<User>
            List<User> userList = Arrays.stream(strings).map(idstr -> {
                User user = new User();
                user.setId(new Long(idstr));
                user.setIsdelete(1);
                return user;
            }).collect(Collectors.toList());
            // 3: 批量删除
            return this.updateBatchById(userList);
        } catch (Exception ex) {
            throw new PugValidationException(ResultCodeEnum.SERVER_DB_ERROR);
        }
    }

}